import Page from "../components/layouts/Page"
import Question from "../components/faq/Question"
import Link from "next/link"

<Page title="常见问题">

<h2>常见问题</h2>

<Question question={<>已启用 <code>logActivity</code> 配置，但仍未有日志输出</>}>

大部分 Vert.x 的网络客户端支持 `logActivity` 配置，用于激活网络活动的日志。
如果启用了该配置，Netty 的 pipeline 将以 `DEBUG` 级别输出日志到 Netty 的日志框架。

因此仅仅启用 `logActivity` 配置是不够的。
您还需要在日志框架的配置中，将 `io.netty.handler.logging.LoggingHandler` 的日志级别设为 `DEBUG` 。

</Question>
<Question question="若 Vert.x 集群的其中一个节点宕机时，事件总线（EventBus）的消息会发生什么？">

当您在事件总线上发送消息时，该消息将发送到消费者节点，消息被处理前会存储在内存中。
消息 **不会** 持久存储在磁盘或数据库中。

因此，如果消费者节点未处理消息就崩溃，则消息会丢失。

如果无法容忍某些消息的丢失，可以有以下几种选择：

- 发送失败并出现错误时，幂等地重试
- 异步确认（消息被消费）

否则，请考虑使用成熟的基于Broker的消息队列系统，例如 [Apache ActiveMQ](http://activemq.apache.org/) 和 [RabbitMQ](https://www.rabbitmq.com/)。

Vert.x 已经有这些消息队列解决方案的客户端： [Vert.x AMQP Client](https://vertx.io/docs/vertx-amqp-client/java/)， [RabbitMQ Client for Vert.x](https://vertx.io/docs/vertx-rabbitmq-client/java/) 以及 [Vert.x-Stomp](https://vertx.io/docs/vertx-stomp/java/)。

</Question>
<Question question="为什么事件总线的消费者不会接收到之前发送的消息？">

当您向事件总线发布一条消息，它将发送至所有注册了相应消息地址消费者的节点。
但消息 **不会** 持久存储在磁盘或数据库中。

因此，现有节点上新注册的消费者、或后续加入集群的节点上的消费者，将 **不会** 收到此前发布的消息。

如果需要此功能，请考虑使用成熟的基于Broker的消息队列系统，例如 [Apache ActiveMQ](http://activemq.apache.org/) 和 [RabbitMQ](https://www.rabbitmq.com/)。

Vert.x 已经有这些消息队列解决方案的客户端： [Vert.x AMQP Client](https://vertx.io/docs/vertx-amqp-client/java/)， [RabbitMQ Client for Vert.x](https://vertx.io/docs/vertx-rabbitmq-client/java/) 以及 [Vert.x-Stomp](https://vertx.io/docs/vertx-stomp/java/)。

</Question>
<Question question="如何使用JVM内置的地址解析器？">

默认情况下，Vert.x使用非阻塞地址解析器，而非JVM内置的地址解析器。
对于大多数用户而言这是透明的，但非阻塞解析器较不成熟，且在某些环境中可能无法使用。

在这种情况下，请在 [Vert.x core 仓库](https://github.com/eclipse-vertx/vert.x/issues) 中建立 issue。

一种可行的解决方法是，关闭非阻塞解析器，并回退到JVM内置的地址解析器。
这种情况下，请在启动JVM时将 `vertx.disableDnsResolver` 系统属性设置为 `true`：

```
-Dvertx.disableDnsResolver=true
```

</Question>

</Page>
